/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.miage.util.ics;

import com.miage.edt.base.SGBDConsultation;
import com.miage.edt.bean.EC;
import com.miage.edt.bean.Intervenant;
import com.miage.edt.bean.Salle;
import com.miage.edt.bean.Seance;
import java.text.Normalizer;
import java.util.Vector;
import java.util.regex.Pattern;
import org.apache.commons.lang.WordUtils;

public class MainIcs {

    public static String epureNomFichier(String s) {

        // JDK1.5
        //   use sun.text.Normalizer.normalize(s, Normalizer.DECOMP, 0);
        String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
        Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
        String result = pattern.matcher(temp).replaceAll("");
        String purge = result.replaceAll("[^A-Za-z0-9_.]", "_")
                .replaceAll("__", "_")
                .replaceAll("\\.\\.",".")
                .replaceAll("^_", "")
                .replaceAll("_\\.", ".");
        return WordUtils.capitalize(purge, new char[]{'_'});
    }

    public static void calendrierIntervenant(String anneeScolaire, String file, String id_i) {
        Vector<Seance> v = SGBDConsultation.consulterListeSeanceIntervenant(id_i, anneeScolaire);
        GenerateurIcs gics = new GenerateurIcs(file);
        for (Seance s : v) {
            gics.ajouterSeance(s);
        }
        gics.ecritCalendrier();
    }

    public static void calendriersIntervenants(String anneeScolaire, String repertoire) {
        Vector<Intervenant> v = SGBDConsultation.consulterListeIntervenant();
        for (Intervenant i : v) {
            String fn = "calendrier_intervenant_" + i.Nom_Intervenant + "_" + i.Prenom_Intervenant /*
                     * + "_" + i.ID_Intervenant
                     */ + ".ics";
            String fp = repertoire + ConstantesIcs.ps + epureNomFichier(fn);
            calendrierIntervenant(anneeScolaire, fp, Integer.toString(i.ID_Intervenant));
        }
    }

    public static void calendrierSalle(String anneeScolaire, String file, int id) {
        Vector<Seance> v = SGBDConsultation.consulterListeSeanceSalle(id, anneeScolaire);
        GenerateurIcs gics = new GenerateurIcs(file);
        for (Seance s : v) {
            gics.ajouterSeance(s);
        }
        gics.ecritCalendrier();
    }

    public static void calendriersSalles(String anneeScolaire, String repertoire) {
        Vector<Salle> v = SGBDConsultation.consulterListeSalle();
        for (Salle s : v) {
            String fn = "calendrier_salle_" + s.getLibelle() /*
                     * + "_" + s.getIdSalle()
                     */ + ".ics";
            String fp = repertoire + ConstantesIcs.ps + epureNomFichier(fn);
            calendrierSalle(anneeScolaire, fp, s.getIdSalle());
        }
    }

    public static void calendrierEC(String anneeScolaire, String file, int id) {
        Vector<Seance> v = SGBDConsultation.consulterListeSeanceEC(id, anneeScolaire);
        GenerateurIcs gics = new GenerateurIcs(file);
        for (Seance s : v) {
            gics.ajouterSeance(s);
        }
        gics.ecritCalendrier();
    }

    public static void calendriersECs(String anneeScolaire, String repertoire) {
        Vector<EC> v = SGBDConsultation.consulterListeEC();
        for (EC e : v) {
            String fn = "calendrier_EC_" + e.getPromotion() + "_" + e.getLibelleEC() /*
                     * + "_" + e.getIdEC()
                     */ + ".ics";
            String fp = repertoire + ConstantesIcs.ps + epureNomFichier(fn);
            calendrierEC(anneeScolaire, fp, e.getIdEC());
        }

    }

    public static void calendrierPromo(String anneeScolaire, String file, String promo) {
        GenerateurIcs gics = new GenerateurIcs(file);
        Vector<String> periodes = SGBDConsultation.consulterListePeriodePromotion(promo, anneeScolaire);
        for (String periode : periodes) {
            Vector<Seance> seances = SGBDConsultation.consulterListeSeancePromotion(periode, promo, anneeScolaire);
            for (Seance s : seances) {
                gics.ajouterSeance(s);
            }
        }
        gics.ecritCalendrier();
    }

    public static void calendriersPromos(String anneeScolaire, String repertoire) {
        String[] promos = new String[]{"L3A", "L3C", "M1A", "M1C", "M2A", "M2C"};
        for (String promo : promos) {
            String fn = "calendrier_promo_" + promo + ".ics";
            String fp = repertoire + ConstantesIcs.ps + epureNomFichier(fn);
            calendrierPromo(anneeScolaire, fp, promo);
        }
    }

    public static void main(String[] args) {
        String anneeScolaire = null;
        String repertoire = null;
        if (args.length == 2) {
            anneeScolaire = args[0];
            repertoire = args[1];
        } else {
            System.out.println ("Mauvais nombre de paramètres");
            System.out.println ("\tUtilisation: [prog] [anneeScolaire] [repertoireDestination]");            
            System.exit(1);
        }
        MainIcs.calendriersPromos(anneeScolaire, repertoire);
        MainIcs.calendriersIntervenants(anneeScolaire, repertoire);
        MainIcs.calendriersSalles(anneeScolaire, repertoire);
        //MainIcs.calendriersECs(anneeScolaire, repertoire);
    }
}
